package com.ssy.lingxi.settle.accounts.service;

import com.ssy.lingxi.common.model.dto.UserLoginCacheDTO;
import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.dto.request.PlatformCouponSettlementDetailExcelQueryRequestVO;
import com.ssy.lingxi.dto.request.PlatformCouponSettlementDetailQueryRequestVO;
import com.ssy.lingxi.dto.request.PlatformCouponSettlementQueryRequestVO;
import com.ssy.lingxi.dto.request.PlatformCouponSettlementRequestVO;
import com.ssy.lingxi.dto.response.PlatformCouponSettlementDetailResponseVO;
import com.ssy.lingxi.dto.response.PlatformCouponSettlementResponseVO;
import com.ssy.lingxi.settle.accounts.model.bo.PayProveBO;
import com.ssy.lingxi.settle.accounts.model.vo.request.AllInPayVO;
import com.ssy.lingxi.settle.accounts.model.vo.request.ConfirmAccountCompleteVO;
import com.ssy.lingxi.settle.accounts.model.vo.request.ConfirmPayProve;
import com.ssy.lingxi.settle.accounts.model.vo.request.PayVO;

import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 平台优惠券结算
 * @author 彭冬冬
 * @version 2.0.0
 * @date 2022/1/17 15:26
 */
public interface IPlatformCouponSettlementService {
    /**
     * 根据消息队列推送消息保存平台优惠券结算
     * @param message 消息
     * @return 保存结果
     */
    Wrapper<Void> save(String message);

    /**
     * 保存平台优惠券结算
     * @param requestVO 平台优惠券数据
     * @return 保存结果
     */
    Wrapper<Void> save(PlatformCouponSettlementRequestVO requestVO);

    /**
     * 定时结算
     * @param dateTime 结算开始时间
     * @return 结算结果
     */
    Wrapper<Void> timingSettlement(LocalDateTime dateTime);

    /**
     * 手动结算
     * @param sysUser 登录用户
     * @param id 平台结算用户id
     * @return 结算结果
     */
    Wrapper<Void> manualSettlement(UserLoginCacheDTO sysUser, Long id);

    /**
     * 平台优惠券结算-查询分页
     * @param sysUser 登录用户
     * @param queryParameter 查询参数
     * @return 查询分页数据
     */
    Wrapper<PageData<PlatformCouponSettlementResponseVO>> pagePayableSettlement(UserLoginCacheDTO sysUser, PlatformCouponSettlementQueryRequestVO queryParameter);

    /**
     * 结算能力-平台结算管理-平台优惠券结算-查询分页
     * @param sysUser 登录用户
     * @param queryParameter 查询参数
     * @return 查询分页数据
     */
    Wrapper<PageData<PlatformCouponSettlementResponseVO>> pageReceivableSettlement(UserLoginCacheDTO sysUser, PlatformCouponSettlementQueryRequestVO queryParameter);
    /**
     * 平台优惠券结算-查询详情
     * @param id 平台优惠券结算id
     * @return 平台结算优惠券信息
     */
    Wrapper<PlatformCouponSettlementResponseVO> getInfo(Long id);

    /**
     * 平台优惠券结算-查询明细分页
     * @param sysUser 登录用户
     * @param queryParameter 查询参数
     * @return 查询明细分页
     */
    Wrapper<PageData<PlatformCouponSettlementDetailResponseVO>> pagePayableSettlementDetail(UserLoginCacheDTO sysUser, PlatformCouponSettlementDetailQueryRequestVO queryParameter);

    /**
     * 结算能力-平台结算管理-平台优惠券结算-查询明细分页
     * @param sysUser 登录用户
     * @param queryParameter 查询参数
     * @return 查询明细分页
     */
    Wrapper<PageData<PlatformCouponSettlementDetailResponseVO>> pageReceivableSettlementDetail(UserLoginCacheDTO sysUser, PlatformCouponSettlementDetailQueryRequestVO queryParameter);

    /**
     * 平台后台-结算-平台结算-平台优惠券结算-查询明细导出
     * @param sysUser 登录用户
     * @param response 响应
     * @param queryParameter 查询条件
     */
    void payableExport(UserLoginCacheDTO sysUser,HttpServletResponse response, PlatformCouponSettlementDetailExcelQueryRequestVO queryParameter);

    /**
     * 结算能力-平台结算管理-平台优惠券结算-查询明细导出
     * @param sysUser 登录用户
     * @param response 响应
     * @param queryParameter 查询条件
     */
    void receivableExport(UserLoginCacheDTO sysUser,HttpServletResponse response, PlatformCouponSettlementDetailExcelQueryRequestVO queryParameter);

    /**
     * 结算能力-平台结算管理-平台优惠券结算-确认对账完成
     * @param sysUser 登录用户
     * @param completeVO 确认信息
     * @return 确认结果
     */
    Wrapper<Void> confirmAccountComplete(UserLoginCacheDTO sysUser, ConfirmAccountCompleteVO completeVO);

    /**
     * 结算能力-平台结算管理-平台优惠券结算-确认付款凭证
     * @param sysUser 登录用户
     * @param confirmVO 确认信息
     * @return confirmVO
     */
    Wrapper<Void> confirmPayProve(UserLoginCacheDTO sysUser, ConfirmPayProve confirmVO);

    /**
     * 线上付款
     * @param sysUser 登录用户
     * @param payVO 付款信息
     * @return 线上付款结果
     */
    Wrapper<Void> pay(UserLoginCacheDTO sysUser, PayVO payVO);

    /**
     * 平台优惠券结算-查看支付凭证
     * @param id 平台优惠券结算id
     * @return 查看支付凭证
     */
    Wrapper<List<PayProveBO>> findPayProves(Long id);

    /**
     * 平台优惠券结算-通联支付付款
     * @param sysUser 登录用户
     * @param payVO 付款信息
     * @return 通联支付付款
     */
    Wrapper<Void> allInPay(UserLoginCacheDTO sysUser, AllInPayVO payVO);

}
